package top.lishuoboy.springmvc.a6;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * 六、SpringMVC的视图
 * SpringMVC中的视图是View接口，视图的作用渲染数据，将模型Model中的数据展示给用户
 * SpringMVC视图的种类很多，默认有转发视图（InternalResourceView）和重定向视图（RedirectView）
 * 当工程引入jstl的依赖，转发视图会自动转换为JstlView（InternalResourceView的子类）
 * 若使用的视图技术为Thymeleaf，在SpringMVC的配置文件中配置了Thymeleaf的视图解析器，由此视图解析器解析之后所得到的是ThymeleafView
 */
@Slf4j
@Controller
@RequestMapping("/a6")
public class ViewController {

    /**
     * 1、ThymeleafView
     * 当控制器方法中所设置的视图名称没有任何前缀时，此时的视图名称会被SpringMVC配置文件中所配置
     * 的视图解析器解析，视图名称拼接视图前缀和视图后缀所得到的最终路径，会通过转发的方式实现跳转
     */
    // http://localhost:8080/lishuoboy_springmvc_war_exploded/a6/1
    @RequestMapping("/1")
    public String testThymeleaf() {
        return "a6/view";
    }

    /**
     * 2、转发视图(没啥用，本身默认就是转发)
     * SpringMVC中默认的转发视图是InternalResourceView
     * SpringMVC中创建转发视图的情况：
     * 当控制器方法中所设置的视图名称以"forward:"为前缀时，创建InternalResourceView视图，此时的视图名称不会被SpringMVC配置文件中所配置的视图解析器解析，而是会将前缀"forward:"去掉，剩余部分作为最终路径通过转发的方式实现跳转
     * 例如"forward:/"，"forward:/employee"
     */
    // http://localhost:8080/lishuoboy_springmvc_war_exploded/a6/2
    @RequestMapping("/2")
    public String testForward() {
        // 【转发到请求】，不能到页面
        return "forward:/a6/1";
    }

    /**
     * 3、重定向视图
     * SpringMVC中默认的重定向视图是RedirectView
     * 当控制器方法中所设置的视图名称以"redirect:"为前缀时，创建RedirectView视图，此时的视图名称不会被SpringMVC配置文件中所配置的视图解析器解析，而是会将前缀"redirect:"去掉，剩余部分作为最终路径通过重定向的方式实现跳转
     * 例如"redirect:/"，"redirect:/employee"
     */
    // http://localhost:8080/lishuoboy_springmvc_war_exploded/a6/3
    @RequestMapping("/3")
    public String testRedirect() {
        // 全url
//        return "redirect:http://www.baidu.com";
        return "redirect:http://localhost:8080/lishuoboy_springmvc_war_exploded/a6/1";
    }

    // http://localhost:8080/lishuoboy_springmvc_war_exploded/a6/3_2
    @RequestMapping("/3_2")
    public String testRedirect2() {
        // 绝对路径
        return "redirect:/a6/1";
    }

    // http://localhost:8080/lishuoboy_springmvc_war_exploded/a6/3_3
    @RequestMapping("/3_3")
    public String testRedirect3() {
        // 相对路径
        return "redirect:1";
    }

}
